


package controladores;
import modelos.Fachada;
import modelos.MConexion;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

import modelos.Fachada;

import vistas.VIngrediente;
import modelos.Conexion;

public class CIngrediente implements  ActionListener{

    private vistas.VIngrediente vista;
    private modelos.MIngrediente modelo;
    private static CIngrediente instancia;
    private Fachada fachada = new Fachada();
    private MConexion conexion = new MConexion();
    
    
  //Patron singleton instancia Unica  
	public static synchronized CIngrediente getInstancia() {
		if (instancia == null)
			instancia = new CIngrediente();
		return instancia;
	}
   
    


    public CIngrediente() { 
    	super();
    	
        this.vista = new VIngrediente(this);
        
        modelo = new modelos.MIngrediente();
        vista.addListener(this);
        String codigo = String.valueOf((conexion.generarCodigo("ingrediente")));
        vista.setCodigo(codigo);

    
    
    }
    public void mostrar() {
        vista.setVisible(true);
    }

    public void actionPerformed(ActionEvent ae) {
        if(ae.getActionCommand().equals("Registrar")){
                registrar();

        }
        else if(ae.getActionCommand().equals("Buscar")){
            buscar();
        }
        else if(ae.getActionCommand().equals("Salir")){
            vista.setVisible(false);
            vista.reiniciar();
        }
        else if(ae.getActionCommand().equals("Actualizar")){
            actualizar();
            vista.reiniciar();
        }
        else if(ae.getActionCommand().equals("Generar")){
            vista.reiniciar();
    
        }
        else{
            vista.reiniciar();
        } 
    }

    public boolean validarCodigoVacio(){
        if(vista.getTxtCodigo().getText().equals("")){
                JOptionPane.showMessageDialog(new JFrame(),"Codigo vacio","Guaro Burguer",JOptionPane.INFORMATION_MESSAGE);
                return false;
            }
        
        return true;
    }

    public boolean validarCamposVacios(ArrayList<JTextField> a){
        for (JTextField texto : a) {
            if(texto.getText().equals("")){
                JOptionPane.showMessageDialog(new JFrame(),"Campos vacios","Guaro Burguer",JOptionPane.INFORMATION_MESSAGE);
                return false;
            }
        }
        return true;
    }

    public boolean validarCamposNumericos(){
    try{
           if(Double.parseDouble(vista.getTxtStock().getText())<=0){
                vista.getTxtStock().setText("");
                JOptionPane.showMessageDialog(new JFrame(),"El stock no es valida","Guaro Burguer",JOptionPane.WARNING_MESSAGE);
                return false;
           }
           if(Double.parseDouble(vista.getTxtCantidad().getText())<0){
                vista.getTxtCantidad().setText("");
                JOptionPane.showMessageDialog(new JFrame(),"La informcion no es valida","Guaro Burguer",JOptionPane.WARNING_MESSAGE);
                return false;
           }
       }catch(NumberFormatException ex){
           JOptionPane.showMessageDialog(new JFrame(),"Debe ingresar valores numericos","Guaro Burguer",JOptionPane.WARNING_MESSAGE);
           return false;
       }
    return true;
    }
// implementacion de patron facade o fachada
    
    private void registrar() {
        if(validarCamposVacios(vista.getEdits()) && validarCamposNumericos()){
        	String Codigo = vista.getTxtCodigo().getText();
        	String Descripcion =vista.getTxtDescripcion().getText();
        	//System.out.println(Descripcion);
        	fachada.setCodigoIngrediente(vista.getTxtCodigo().getText());
            fachada.setDescripcionIngrediente(vista.getTxtDescripcion().getText());
            fachada.setStatus("A");
            fachada.setStockIngrediente(Float.parseFloat(vista.getTxtStock().getText()));
           
            fachada.registrar();
            
                JOptionPane.showMessageDialog(new JFrame(),"Ingrediente registrado exitosamente","Guaro Burguer",JOptionPane.INFORMATION_MESSAGE);
                      
            int nuevoCodigo= Integer.parseInt(vista.getTxtCodigo().getText())+1;
         
            vista.setCodigo(String.valueOf(nuevoCodigo));
            vista.reiniciar();

        }
        else
            JOptionPane.showMessageDialog(new JFrame(),"El codigo o la descripcion ya se encuentra registrada","Guaro Burguer",JOptionPane.INFORMATION_MESSAGE);

    }
    //Uso de patron Facade o fachada
    private void actualizar() {
        if(validarCamposVacios(vista.getEdits()) && validarCamposNumericos()){
          fachada.setCodigoIngrediente(vista.getTxtCodigo().getText());
          fachada.setDescripcionIngrediente(vista.getTxtDescripcion().getText());
          fachada.setStatus("A");
          fachada.setStockIngrediente(fachada.getStockIngrediente()+Float.parseFloat(vista.getTxtCantidad().getText()));
            fachada.actualizar();
                JOptionPane.showMessageDialog(new JFrame(),"Ingrediente actualizado exitosamente","Guaro Burguer",JOptionPane.INFORMATION_MESSAGE);
            vista.reiniciar();
            
                   }
        else
            JOptionPane.showMessageDialog(new JFrame(),"La descripcion ya se encuentra registrada","Guaro Burguer",JOptionPane.INFORMATION_MESSAGE);

    }
//fachada
    private void buscar() {
       if(validarCodigoVacio()){
           fachada.setCodigoIngrediente(vista.getTxtCodigo().getText());
           fachada.consultar();
               vista.getTxtDescripcion().setText(fachada.getDescripcionIngrediente());
               vista.getTxtStock().setText(""+fachada.getStockIngrediente());
                vista.mostrar();
            
           
    }
       else
           JOptionPane.showMessageDialog(new JFrame(),"EL codigo no esta registrado","Guaro Burguer",JOptionPane.INFORMATION_MESSAGE);
     
    }

    
}
